# 单个cmake文件编写
# 1. 添加cmake版本说明
# 2. 声明工厂名称
# 3. 检测并生成ODB框架代码
#   1）添加所需的映射代码文件名称
#   2）检测框架代码文件是否已经生成
#   3）如果没有生成就预定义生成指令 -- 用于在构建项目之前先生成框架代码
#   4）将所有生成的框架源码文件名称保存
# 4. 获取源码目录下的所有源码文件
# 5. 声明目标及依赖
# 6. 设置头文件默认搜索路径
# 7. 设置需要链接的库
# 8. 设置安装路径
# INSTALL(TARGETS ${target_name} RUNTIME DESTINATION bin) 


cmake_minimum_required(VERSION 3.1.3)  # 设置cmake版本 --VERSION 3.1.3
project(ODB_test)  # 设置项目名称 --ODB_test

set(ODB_path ${CMAKE_CURRENT_SOURCE_DIR}/protodir)  # 设置ODB路径
                                                    # CMAKE_CURRENT_SOURCE_DIR 表示CMakeLists.txt所在路径
set(ODB_files student.hxx)  # 设置映射代码文件名

set(odb_hxx "")
set(odb_cxx "")
set(odb_srcs "")
foreach(ODB_file ${ODB_files})
    # string(REPLACE ".old" ".new" dest src)  将src中".old"替换成".new"，并赋值给dest
    string(REPLACE ".hxx" "-odb.hxx" odb_hxx ${ODB_file})
    string(REPLACE ".hxx" "-odb.cxx" odb_cxx ${ODB_file})  
    # NOT EXISTS --不存在   CMAKE_CURRENT_BINARY_DIR --cmake 执行命令时所在的工作路径
    if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}${odb_cxx})
        add_custom_command(
            # 表示在项目执行之前要执行的指令
            PRE_BUILD
    # //odb -d mysql --std c++11 --generate-query --generate-schema --profile boost/date-time student.hxx
            # 要执行的指令名称  
            COMMAND odb
            # 要执行的指令的运行参数选项
            ARGS -d mysql --std c++11 --generate-query --generate-schema --profile boost/date-time ${ODB_path}/${ODB_file}
            # 指定命令依赖项
            DEPENDS ${ODB_path}/${ODB_file}
            # 指定要生成的目标名称
            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${odb_cxx}
            COMMENT "生成ODB源码框架代码文件: " ${CMAKE_CURRENT_BINARY_DIR}/${odb_cxx}
        )
    endif()
    # 将cxx文件保存
    list(APPEND odb_srcs ${CMAKE_CURRENT_BINARY_DIR}/${odb_cxx})
endforeach()
    # 获取源码文件
    set(src_files "")
    aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source src_files)
    # 添加生成目标
    add_executable(main ${src_files} ${odb_srcs})

    # 设置头文件路径
    include_directories(${CMAKE_CURRENT_SOURCE_DIR}/protodir)
    include_directories(${CMAKE_CURRENT_BINARY_DIR})
    # 添加链接库
    target_link_libraries(main -lodb-mysql -lodb -lodb-boost -lgflags -lgtest)
    # 设置安装路径
    INSTALL(TARGETS main RUNTIME DESTINATION bin)